home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- *
- * NSSDC/CDF INTERNAL interface to CDF.
- *
- * Version 2.3, 14-Feb-92, ST Systems (STX)
- *
- * Modification history:
- *
- * V1.0 22-Jan-91, R Kulkarni/J Love Original version (for CDF V2.0).
- *
- * V2.0 6-Jun-91, J Love Renamed (was cdfcore.c). Modified for
- * V2.1 style INTERNAL interface (and
- * fixes to CDF V2.0 distribution). Also
- * renamed some symbols for clarity.
- * V2.1 24-Jun-91, J Love Fixed PUT_,VAR_INITIALRECS. Stripped
- * trailing blanks off of CDF names.
- * Allow variable data type to be changed
- * if "equivalent". Added CDF_EPOCH as
- * a data type.
- * V2.2 8-Aug-91, J Love Don't use #elif (for SGi port) and
- * added support for Cray/UNICOS.
- * INTERNAL i/f function renamed 'CDFlib'.
- * Different numbers of CACHE buffers for
- * different file types (VIO). Modified
- * hyper access (and fixed part of it).
- * Changed attribute entry access. Check
- * for supported encoding when opening a
- * CDF.
- * V2.3 14-Feb-92, J Love Changed for IBM-PC port (split into
- * smaller source files, etc.). Renamed
- * global variables.
- *
- ******************************************************************************/
-
- #define CDFLIB 1 /* This should only be defined in one of the
- CDF library source files. */
-
- #include "cdflib.h"
-
- /******************************************************************************
- * Interface to CDF internal structures and data/meta-data.
- ******************************************************************************/
-
- #if !defined(__MSDOS__)
- CDFstatus CDFlib (va_alist)
- va_dcl
- #else
- CDFstatus CDFlib (long requiredFnc, ...)
- #endif
- {
- va_list ap;
- long item;
- long fnc;
- CDFstatus Pstatus = CDF_OK;
- CDFstatus Tstatus;
-
- #if defined(__MSDOS__)
- va_start(ap, requiredFnc);
- #else
- va_start(ap);
- #endif
-
- /******************************************************************************
- * Reset "current" CDF and "current" CDFstatus.
- ******************************************************************************/
-
- _CURcdf = NULL;
- _CURstatus = RESERVED_CDFSTATUS;
-
- /******************************************************************************
- * Process variable length argument list.
- ******************************************************************************/
-
- #if defined(__MSDOS__)
- fnc = requiredFnc;
- #else
- fnc = va_arg (ap,long);
- #endif
-
- while (fnc != NULL_) {
- switch (fnc) {
- case CREATE_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFcre (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case OPEN_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFope (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case DELETE_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFdel (item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case CLOSE_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFclo (item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case SELECT_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFsel (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case CONFIRM_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFcon (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case GET_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFget (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- case PUT_:
- for (;;) {
- item = va_arg (ap, long);
- Tstatus = CDFput (&ap, item, &fnc);
- STATUSdisp (Tstatus, Pstatus);
- if (fnc == item) break;
- }
- break;
-
- default: {
- va_end (ap);
- return BAD_FNC_OR_ITEM;
- }
- }
- }
- va_end (ap);
- return Pstatus;
- }
-